Web 改进
- 现有的基于
ResourceHttpRequestHandler
的资源处理已经扩展了新的抽象ResourceResolver
,ResourceTransformer
和ResourceUrlProvider
。一些内置的实现提供了版本控制资源的 URL(有效的 HTTP 缓存),定位 gzip 压缩的资源,产生 HTML5 AppCache清单,以及更多的支持。参见第17.16.7,“Serving of Resources(服务资源)”。
- JDK 1.8 的
java.util.Optional
现在支持@RequestParam
,@RequestHeader
和@MatrixVariable
控制器方法的参数。
ListenableFuture
支持作为返回值替代DeferredResult
所在的底层服务(或者调用AsyncRestTemplate
)已经返回ListenableFuture
。
@ModelAttribute
方法现在依照相互依存关系的顺序调用。见SPR-6299。
- Jackson的
@JsonView
被直接支撑在@ResponseBody
和ResponseEntity
控制器方法用于序列化不同的细节对于相同的 POJO(如摘要与细节页)。同时通过添加序列化视图类型作为模型属性的特殊键来支持基于视图的渲染。见Jackson Serialization View Support(Jackson序列化视图支持)
- Jackson 现在支持 JSONP ,见 Jackson JSONP Support
- 一个新的生命周期选项可用于在控制方法返回后,响应被写入之前拦截
@ResponseBody
和ResponseEntity
方法。要充分利用声明@ControllerAdvice
bean 实现ResponseBodyAdvice
。为@JsonView
和 JSONP 的内置支持利用这一优势。参见第17.4.1,“使用HandlerInterceptor 拦截请求”。
- 有三个新的
HttpMessageConverter
选项:
- GSON - 比 Jackson 更轻量级的封装;已经被使用在 Spring Android
- Google Protocol Buffers - 高效和有效的企业内部跨业务的数据通信协议,但也可以用于浏览器的 JSON 和 XML 的扩展
- Jackson 基于 XML 序列化,现在通过 jackson-dataformat-xml 扩展得到了支持。如果
jackson-dataformat-xml
在 classpath, 默认情况下使用@EnableWebMvc
或<mvc:annotation-driven/>
,这是,而不是JAXB2。
- 如 JSP 等视图现在可以通过名称参照控制器映射建立链接控制器。默认名称分配给每一个
@RequestMapping
。例如FooController
的方法与handleFoo
被命名为“FC#handleFoo”。命名策略是可插拔的。另外,也可以通过其名称属性明确命名的@RequestMapping
。在Spring JSP标签库的新mvcUrl
功能使这个简单的JSP页面中使用。参见第17.7.2,“Building URIs to Controllers and methods from views”
ResponseEntity
提供了一种 builder 风格的 API 来指导控制器向服务器端的响应的展示,例如,ResponseEntity.ok()。
RequestEntity
是一种新型的,提供了一个 builder 风格的 API 来引导客户端的 REST 响应 HTTP 请求的展示。
- MVC 的 Java 配置和 XML 命名空间:
- 视图解析器现在可以配置包括内容协商的支持,请参见17.16.6“视图解析”。
- 视图控制器现在已经内置支持重定向和设置响应状态。应用程序可以使用它来配置重定向的URL,404 视图的响应,发送“no content”的响应,等等。有些用例这里列出。
- 现在内置路径匹配的自定义。参见第17.16.9,“路径匹配”。
- Groovy 的标记模板支持(基于Groovy的2.3)。见
GroovyMarkupConfigurer
和各自的ViewResolver
和“视图”的实现。